#include <iostream>
using namespace std;
#include <string>

class Exception 
{
public:
    virtual string what() const = 0;

};

/* 除法异常类 */
class DivideException : public Exception
{
public:
    string what() const
    {
        return "不能除以0";
    }
};


class MemoryExtion : public Exception
{
public:
    string what() const
    {
        return "内存异常";
    }
};

int diviede(int val1, int val2) noexcept(false)
{  
    // try
    // {
        if(val2 == 0)
        {
            throw DivideException();
        }
    // }
    // catch(const Exception& ex)
    // {
    //     cout << ex.what() << endl;
    // }
    printf("===\n");
    return val1 / val2;
}


int simulateNewException()
{
    for(int idx = 0; idx < 10000000000000; idx++)
    {
        try
        {
            int * num = new int[100000000];
        }
        catch(const std::bad_alloc& e)
        {
            // std::cerr << e.what() << '\n';
            cout << "内存错误" << e.what() << endl;
            break;
        }
        
    }
    return 0;
}

int main()
{
    simulateNewException();
    // Exception * ex = new MemoryExtion();
    // try
    // {
    //     cout << diviede(10, 0) << endl;
    //     printf("**********\n");
    // }
    // // catch(const Exception& ex)
    // // {
    // //     cout << ex.what() << endl;
    // // }
    // catch(int code)
    // {

    // }
    return 0;
}